package com.opcode.nebulamobil.utility;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.opcode.nebulamobil.information.dataforms.DataForm;
import com.opcode.nebulamobil.information.requests.JSONRequest;

/**
 * Bu s�n�f Gson apisini kullanmak i�in olu�turulmu�tur.
 * Uygulamadaki herhangi bir yerden bu s�n�fa eri�ilerek nesneden Json stringine, Json stringinden nesneye d�n�ߟm yap�l�r.
 * @author Okan ERDO�AN
 *
 * 26 Tem 2014
 */
public class JsonConverter {

	
	//Referanslar
	private static Gson gson;
	private static String jsonString;
	private static DataForm data;
	private static Object objectData;
	
	
	/**
	 * Parametre olarak alm�� oldu�u data objesini geriye Json string format�nda d�nd�r�r.
	 * @param dataObject
	 * @return
	 */
	public static String toJsonString(DataForm dataObject) {	
		gson=new Gson();
		jsonString = gson.toJson(dataObject);
		return jsonString;
	}
	
	public static String toJsonString(JSONRequest dataObject) {	
		gson=new Gson();
		jsonString = gson.toJson(dataObject);
		return jsonString;
	}
	
	
	
	/**
	 * Parametre olarak bir json stringi ve dataform class'� al�r.
	 * Alm�� oldu�u bu parametrelerden class dosyas� ile hangi nesnenin �retilmesini istedi�imizi bildirmi� oluruz.
	 * Json stringi ise olu�turulan bu nesnenin i�indeki de�i�kenlere veri set etmemizi sa�lar.
	 * @param jsonString
	 * @param dataForm
	 * @return
	 */
	public static DataForm fromJsonString(String jsonString,Class<? extends DataForm> dataForm) {
		gson=new Gson();
		try{
			data=gson.fromJson(jsonString, dataForm);
		}catch(JsonSyntaxException e){
			STSLog.writeLog(e,"com.opcode.communication.json.JsonConverter","G�nderilen string json format�na uymamaktad�r.");														
		}catch(IllegalStateException e){
			STSLog.writeLog(e,"com.opcode.communication.json.JsonConverter","Json Stringi verilip, geriye nesne al�nmaya �al���l�rken bir hata meydana geldi.");														
		}
		return data;
	}
	
	
	/**
	 * Bu metod da bir objeden, bu objenin de�erlerinin bulundu�u bir json stringi elde etmek i�in kullan�l�r.
	 * @param dataObject
	 * @return
	 */
	public static String toJsonString(Object dataObject) {	
		gson=new Gson();
		jsonString = gson.toJson(dataObject);
		return jsonString;
	}
	
	
	/**
	 * Herhangi bir class tipinde (DataForm'un alt s�n�f� olmas�na gerek kalmadan) nesnelerin json stringinden �retilebilmesi i�in terih edilen metoddur.
	 * @param jsonString
	 * @param object
	 * @return
	 */
	public static Object fromJsonString(String jsonString,Class<?> object) {
		gson=new Gson();
		try{
			objectData=gson.fromJson(jsonString, object);
		}catch(JsonSyntaxException e){
			STSLog.writeLog(e,"com.opcode.communication.json.JsonConverter","G�nderilen string json format�na uymamaktad�r.");														
		}catch(IllegalStateException e){
			STSLog.writeLog(e,"com.opcode.communication.json.JsonConverter","Json Stringi verilip, geriye nesne al�nmaya �al���l�rken bir hata meydana geldi.");														
		}
		return data;
	}
}
